package a10_StreamIO;

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

/**
 * @Author quan
 * @Description 综合案例1
 * @Date 2023/5/24 17:38
 */
public class Exe01 {
    /**
     * 要求：扫描指定目录，找到目录中包含的所有指定字符的文件(不包含目录)，并且后期询问用户是否要删除该文件
     * @param args
     */
    public static void main(String[] args) throws IOException {
        //1、接收用户输入的扫描路径
        System.out.println("请输入要扫描的路径(绝对路径)：");
        Scanner sc = new Scanner(System.in);
        String rootPath = sc.next();
        //2、路径的合法性校验
        File root = new File(rootPath);
        //2.1判断路径是否存在
        if(!root.exists()){
            System.out.println("路径不存在");
            //直接结束该方法
            return;
        }
        //2.2判断File是不是一个目录，如果不是目录则不合法
        if (!root.isDirectory()) {
            System.out.println("该指定的路径不是一个有效目录");
            return;
        }
        //3、接收要在目录中查找的文件名：我们把它叫做关键字
        System.out.println("请输入关键字：");
        String key = sc.next();
        if(key == null || key.equals("")){
            System.out.println("关键字不能为空");
            return;
        }
        //4、开始查找 该目录下的所有问津
        scan(root,key);
    }

    /**
     * 输入路径和文件，找到该路径下的所有文件名为key的文件
     * @param root 目录的路径
     * @param key 要在目录中查找的文件
     */
    private static void scan(File root, String key) throws IOException {
        //1、先获取root下的所有文件，包括目录
        File[] files = root.listFiles();
        //2、递归的终止条件
        if(files == null || files.length == 0){
            return;
        }
        //3、开始遍历文件数组中的每个文件
        for (int i = 0; i < files.length; i++) {
            //3.1先取出每个文件
            File tempFile = files[i];
            //3.2判断是文件还是目录
            //如果是文件，判断是不是我们要找的文件(根据关键字判断)
            if(tempFile.isFile()){
                //获取文件的名字
                String fileName = tempFile.getName();
                if(fileName.contains(key)){
                    System.out.println("找到文件"+tempFile.getCanonicalPath()+"是否需要删除(Y/N)");
                }
                //获取用户的选择
                Scanner sc = new Scanner(System.in);
                String choice = sc.next();
                //判断是否要删除
                if(choice.equalsIgnoreCase("y")){
                    //删除文件
                    tempFile.delete();
                    System.out.println(tempFile.getCanonicalPath()+"删除成功");
                }
            }
            //说明是目录：则继续递归寻找文件
            else{
                scan(tempFile,key);
            }
        }
    }
}
